package br.com.sovi.resources.ponto;

import java.util.List;

import org.openinsula.vulcano.orm.command.DaoCommandWithoutResult;
import org.openinsula.vulcano.orm.dao.query.DaoQuery;
import org.openinsula.vulcano.orm.dao.query.builder.DaoSelect;
import org.springframework.util.StringUtils;

import br.com.sovi.persistence.Dispositivo;
import br.com.sovi.persistence.Ponto;

/**
 * @author João Galli
 * 
 */
public class RecordPointCommand extends DaoCommandWithoutResult {
	private static final long serialVersionUID = 1L;

	private String serial;

	private List<PontoVO> pontos;

	public RecordPointCommand(String serial, List<PontoVO> pontos) {
		super();
		this.serial = serial;
		this.pontos = pontos;
	}

	@Override
	public void executeWithoutResult() {
		if (!StringUtils.hasText(serial)) {
			throwError("O serial do dispositivo deve ser preenchido.");
		}

		DaoQuery<Dispositivo> query = new DaoSelect<Dispositivo>().all().from(Dispositivo.class).eq("serial", serial)
				.limit(1).toQuery();
		Dispositivo dispositivo = dao.findUnique(query);

		if (dispositivo == null) {
			throwError("Nenhum dispositivo encontrado para o serial: " + serial);
		}
		
		for (PontoVO vo : pontos) {
			Ponto ponto = vo.toBean();
			dispositivo.addPonto(ponto);
			
			dao.persist(ponto);
		}
		
		dao.persist(dispositivo);
	}

	private void throwError(String string) {
		throw new IllegalArgumentException(string);
	}

}
